#ifndef __LIST_H__
#define __LIST_H__

// 头文件内容
#include "head.h"
#include "array.h"
//用户数据对象
typedef struct user_data
{
    char name[16];      // 用户名
    char passwd[64];    // 用户密码
    char sex[16];       // 用户性别
    int level;          // 用户等级
    char phone[12];     // 手机号码
    int value;          // 余额
    int total_payment;  //累计充值金额
    int tickets;        // 记录票数
} user_data;     

// 用户数据节点 - 单链表
typedef struct u_node
{
    user_data data;
    struct u_node *next;
} u_node;

// 头结点
typedef struct u_list
{
    struct u_node *next;
} u_list;

// 用户-单链表的相关操作声明

// 单链表的创建
u_list *init_u_list(void);
// 单链表的销毁
void free_u_list(u_list **list);

// 单链表的插入
// 头插
void head_insert_u_node(u_list *list, user_data data);
// 尾插
void tail_insert_u_node(u_list *list, user_data data);
// 尾插不保存到文件
void Tail_u_node(u_list *list, user_data data);
// 任意插
void insert_u_node(u_list *list, user_data data, int pos);

// 单链表的删除
// 尾删
void tail_delete_u_node(u_list *list);
// 任意删
void delete_u_node(u_list *list, int pos);
// 按名字删除
void delete_u_node_byname(u_list *list, char *name);

// 单链表的查找
// 按位置查找
u_node *find_u_node_id(u_list *list, int pos);
// 按名字查找
u_node *find_u_node_name(u_list *list, char *name);
// 按名字查找返回节点数据
user_data find_u_data_name(u_list *list, char *name);

// 单链表的遍历
void print_u_list(u_list *list);

// 打印一条用户数据
void print_one_udata(user_data data);

// 单链表的判空
void IsEmpty_link_u_List(u_list *list);

// 单链表的清空
void clear_u_list(u_list *list);

// 单链表的合并
u_list *merge_link_lists(u_list *list1, u_list *list2);

#endif